# 通用 Makefile，自动收集子目录的 .c 文件并编译链接
CC := gcc
CFLAGS := -std=c11 -Wall -Wextra -g
LDFLAGS := -lpthread -lcrypt

# 递归查找所有 .c 源文件
SRCS := $(shell find . -name '*.c' -print)
# 对应的 .o 文件（.c -> .o）
OBJS := $(patsubst %.c,%.o,$(SRCS))

# 自动收集源文件所在目录并转为 -I 参数（去重）
INC_DIRS := $(sort $(dir $(SRCS)))
INCLUDES := $(patsubst %,-I%,$(INC_DIRS))

TARGET := client

.PHONY: all clean

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 通用编译规则
%.o: %.c
	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)